/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
using System.Collections.Generic;

using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Transform;
using Aliyun.Acs.Core.Utils;
using Aliyun.Acs.Vpc.Transform;
using Aliyun.Acs.Vpc.Transform.V20160428;

namespace Aliyun.Acs.Vpc.Model.V20160428
{
    public class CreateFullNatEntryRequest : RpcAcsRequest<CreateFullNatEntryResponse>
    {
        public CreateFullNatEntryRequest()
            : base("Vpc", "2016-04-28", "CreateFullNatEntry", "vpc", "openAPI")
        {
            if (this.GetType().GetProperty("ProductEndpointMap") != null && this.GetType().GetProperty("ProductEndpointType") != null)
            {
                this.GetType().GetProperty("ProductEndpointMap").SetValue(this, Aliyun.Acs.Vpc.Endpoint.endpointMap, null);
                this.GetType().GetProperty("ProductEndpointType").SetValue(this, Aliyun.Acs.Vpc.Endpoint.endpointRegionalType, null);
            }
			Method = MethodType.POST;
        }

		private string fullNatEntryDescription;

		private long? resourceOwnerId;

		private string accessIp;

		private string clientToken;

		private string natIpPort;

		private string fullNatTableId;

		private string accessPort;

		private bool? dryRun;

		private string resourceOwnerAccount;

		private string ipProtocol;

		private string ownerAccount;

		private long? ownerId;

		private string fullNatEntryName;

		private string natIp;

		private string networkInterfaceId;

		public string FullNatEntryDescription
		{
			get
			{
				return fullNatEntryDescription;
			}
			set	
			{
				fullNatEntryDescription = value;
				DictionaryUtil.Add(QueryParameters, "FullNatEntryDescription", value);
			}
		}

		public long? ResourceOwnerId
		{
			get
			{
				return resourceOwnerId;
			}
			set	
			{
				resourceOwnerId = value;
				DictionaryUtil.Add(QueryParameters, "ResourceOwnerId", value.ToString());
			}
		}

		public string AccessIp
		{
			get
			{
				return accessIp;
			}
			set	
			{
				accessIp = value;
				DictionaryUtil.Add(QueryParameters, "AccessIp", value);
			}
		}

		public string ClientToken
		{
			get
			{
				return clientToken;
			}
			set	
			{
				clientToken = value;
				DictionaryUtil.Add(QueryParameters, "ClientToken", value);
			}
		}

		public string NatIpPort
		{
			get
			{
				return natIpPort;
			}
			set	
			{
				natIpPort = value;
				DictionaryUtil.Add(QueryParameters, "NatIpPort", value);
			}
		}

		public string FullNatTableId
		{
			get
			{
				return fullNatTableId;
			}
			set	
			{
				fullNatTableId = value;
				DictionaryUtil.Add(QueryParameters, "FullNatTableId", value);
			}
		}

		public string AccessPort
		{
			get
			{
				return accessPort;
			}
			set	
			{
				accessPort = value;
				DictionaryUtil.Add(QueryParameters, "AccessPort", value);
			}
		}

		public bool? DryRun
		{
			get
			{
				return dryRun;
			}
			set	
			{
				dryRun = value;
				DictionaryUtil.Add(QueryParameters, "DryRun", value.ToString());
			}
		}

		public string ResourceOwnerAccount
		{
			get
			{
				return resourceOwnerAccount;
			}
			set	
			{
				resourceOwnerAccount = value;
				DictionaryUtil.Add(QueryParameters, "ResourceOwnerAccount", value);
			}
		}

		public string IpProtocol
		{
			get
			{
				return ipProtocol;
			}
			set	
			{
				ipProtocol = value;
				DictionaryUtil.Add(QueryParameters, "IpProtocol", value);
			}
		}

		public string OwnerAccount
		{
			get
			{
				return ownerAccount;
			}
			set	
			{
				ownerAccount = value;
				DictionaryUtil.Add(QueryParameters, "OwnerAccount", value);
			}
		}

		public long? OwnerId
		{
			get
			{
				return ownerId;
			}
			set	
			{
				ownerId = value;
				DictionaryUtil.Add(QueryParameters, "OwnerId", value.ToString());
			}
		}

		public string FullNatEntryName
		{
			get
			{
				return fullNatEntryName;
			}
			set	
			{
				fullNatEntryName = value;
				DictionaryUtil.Add(QueryParameters, "FullNatEntryName", value);
			}
		}

		public string NatIp
		{
			get
			{
				return natIp;
			}
			set	
			{
				natIp = value;
				DictionaryUtil.Add(QueryParameters, "NatIp", value);
			}
		}

		public string NetworkInterfaceId
		{
			get
			{
				return networkInterfaceId;
			}
			set	
			{
				networkInterfaceId = value;
				DictionaryUtil.Add(QueryParameters, "NetworkInterfaceId", value);
			}
		}

		public override bool CheckShowJsonItemName()
		{
			return false;
		}

        public override CreateFullNatEntryResponse GetResponse(UnmarshallerContext unmarshallerContext)
        {
            return CreateFullNatEntryResponseUnmarshaller.Unmarshall(unmarshallerContext);
        }
    }
}
